package cn.tedu.yxc;

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.RandomUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Apptest01 {
    public static void main(String[] args) {
        Human a = gen(Human.class);
        Bird b = gen(Bird.class);
        System.out.println(a);
        System.out.println(b);
    }

    /**
     * 传入一个类对象，返回该类的实例，并为该实例的属性赋予随机值
     *
     * @param s   类对象
     * @param <X> 泛型
     * @return 返回类的实例
     */
    public static <X> X gen(Class<X> s) {
        try {
            X x = s.newInstance();
            // 获取类对象 s 中的所有的字段
            Field[] fields = s.getDeclaredFields();
            for (Field field : fields) {
                // 使得字段被允许赋值
                field.setAccessible(true);
                Class<?> type = field.getType();
                System.out.println(type);
                if (type.isAssignableFrom(String.class)) {
                    // 说明该字段是 String 类型
                    String value = RandomStringUtils.randomAlphabetic(3);
                    field.set(x, value);
                    System.out.println(value);
                } else if (type.isAssignableFrom(Double.class)) {
                    // 说明该字段是 Double 类型
                    Double v = RandomUtils.nextDouble();
                    field.set(x, v);
                }
            }
            return x;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
